class: center, middle, inverse, title-slide .title[ # Flujo de trabajo en R ] .subtitle[ ## Diplomatura en Ciencias Sociales Computacionales y Humanidades Digitales ] --- <style type="text/css"> .remark-slide-content { font-size: 25px; padding: 1em 1em 1em 1em; } <style type="text/css"> .remark-code{ line-height: 1.5; font-size: 80% } @media print { .has-continuation { display: block; } } </style> # Hoja de ruta ## ✔️ Proyectos en R ## ✔️ Nombrando archivos ## ✔️ Mirada exploratoria de la base ## ✔️ Uniendo dataframes ## ✔️ Exportación de resultados <br> Algunas referencias que inspiran este material: https://es.r4ds.hadley.nz/flujo-de-trabajo-proyectos.html https://slides.djnavarro.net/project-structure/ --- class: inverse, center, middle # Directorios de trabajo <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- #Directorios de trabajo - Proyectos ¿Cómo garantizar que la ruta para importar bases de datos al ambiente de R y para exportar resultados pueda funcionar si muevo mis carpetas o las comparto? .left-column[ <img src="data:image/png;base64,#img/no y si.png" width="369" /> ] .right-column[ ```r read.csv("C:\Users\Guido\Clase 4\bases\inmuebles-estado-nacional.csv") ``` ```r dir.create("C:\Users\Guido\Clase 4\Resultados") ``` ```r setwd("C:\Users\Guido\Cursos\Diplomatura UNSAM\") ``` <img src="data:image/png;base64,#img/Rproject.png" width="213" style="display: block; margin: auto auto auto 0;" /> ] --- #Directorios de trabajo - Proyectos .pull-left[Rstudio tiene una herramienta muy útil de trabajo, que son los **proyectos**. Un proyecto es un archivo que identifica toda una carpeta de trabajo. Para crearlo, vamos al logo de nuevo proyecto y elegimos la carpeta de trabajo. Cuando trabajemos con proyectos: - El directorio de trabajo siempre toma como punto inicial la carpeta donde esta ubicada el archivo .Rproj. - El Environment es específico de nuestro proyecto. No se nos mezclará con resultados de código que podamos correr en otros proyectos. ] .pull-right[ <img src="data:image/png;base64,#img/nuevo_proyecto.png" width="839" /> <img src="data:image/png;base64,#img/nuevo_proyecto2.png" width="640" /> ] --- #Práctica - Abran RStudio en sus computadoras y creen un nuevo proyecto en una carpeta de sus computadoras que este a mano. - Abran un nuevo script, importen las librerías **"openxlsx"** y **"tidyverse"** al ambiente de trabajo. Instalenlas previamente en caso de no haberlo hecho aún. Recuerden: `install.packages("nombre_del_paquete")` - Guarden el script dentro de la carpeta del proyecto que crearon. - Ejecuten la función `list.files()` --- class: inverse, center, middle # Nombrando archivos <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- #Nombrando Archivos ##Serie de recomendaciones para organizar la carpeta de trabajo de un proyecto - Preferentemente utilizar minúsculas para nombrar nuestros archivos ✅ procesamiento.r ❌ Procesamiento.r ✅ analisis.r - No utilizar espacios en blanco ni caracteres especiales (^.*?+|$) ✅ procesamiento_inmuebles.r ❌ procesamiento inmuebles.r ❌ procesamiento.inmuebles.r ✅ graficos_evolucion_inmuebles.r ❌ gráficos_evolución_inmuebles.r --- #Nombrando archivos (y/o carpetas) - Guardar consistencia en los caracteres utilizados y el orden de los componentes de los nombres ✅ procesamiento_inmuebles.r ✅ graficos_evolucion_inmuebles.r ❌ inmuebles-informe.rmd - Si tengo muchos archivos en una carpeta: utilizar números para ordenar y palabras clave para documentos similares ✅ 01_procesamiento_base_inmuebles.r ✅ 02_graficos_evolucion_inmuebles.r ✅ 03_graficos_provincias_inmuebles.r ✅ 04_informe_inmuebles.r ❌ inmuebles-datos-VF20210414.r --- class: inverse, center, middle # Importación de archivos (repaso) <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- #Importación de bases de datos A la hora de importar una base de datos nos podemos llegar a enfrentar a distintos tipos de archivos. En R contamos con **distintos paquetes y funciones** según el **tipo de extensión** del archivo: <table class="table table-striped table-hover" style="margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> Tipo de archivo </th> <th style="text-align:left;"> Paquete </th> <th style="text-align:left;"> Extension </th> <th style="text-align:left;"> Funciones </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Texto Plano </td> <td style="text-align:left;"> readr </td> <td style="text-align:left;"> .csv </td> <td style="text-align:left;"> read_csv() </td> </tr> <tr> <td style="text-align:left;"> Texto Plano </td> <td style="text-align:left;"> readr </td> <td style="text-align:left;"> .txt </td> <td style="text-align:left;"> read_txt() </td> </tr> <tr> <td style="text-align:left;"> Texto Plano </td> <td style="text-align:left;"> readr </td> <td style="text-align:left;"> .tsv </td> <td style="text-align:left;"> read_tsv() </td> </tr> <tr> <td style="text-align:left;"> Extension de R </td> <td style="text-align:left;"> RBase </td> <td style="text-align:left;"> .RDS </td> <td style="text-align:left;"> readRDS() </td> </tr> <tr> <td style="text-align:left;"> Extension de R </td> <td style="text-align:left;"> RBase </td> <td style="text-align:left;"> .RDATA </td> <td style="text-align:left;"> open() </td> </tr> <tr> <td style="text-align:left;"> Otros Softwares </td> <td style="text-align:left;"> haven </td> <td style="text-align:left;"> .dta </td> <td style="text-align:left;"> read_dta() </td> </tr> <tr> <td style="text-align:left;"> Otros Softwares </td> <td style="text-align:left;"> haven </td> <td style="text-align:left;"> .sav </td> <td style="text-align:left;"> read_spss() </td> </tr> <tr> <td style="text-align:left;"> Excel </td> <td style="text-align:left;"> openxlsx </td> <td style="text-align:left;"> .xlsx </td> <td style="text-align:left;"> read.xlsx() </td> </tr> <tr> <td style="text-align:left;"> Excel </td> <td style="text-align:left;"> readxl </td> <td style="text-align:left;"> .xls </td> <td style="text-align:left;"> read_excel() </td> </tr> </tbody> </table> --- #Importación de bases de datos ## Archivos de texto plano .pull-left[ En archivos de texto plano, se recomienda usar el paquete **readr** (que forma parte de tidyverse). Las diferencias entre cada una de sus funciones está en los parámetros que poseen para mejorar la importación. <img src="data:image/png;base64,#img/readcsv.png" width="991" /> ] .pull-right[ ¿Qué es lo que indican algunos de los parámetros que tenemos en la imagen? - encabezado (¿Tiene o no una primera fila con los nombes de las variables?) - delimitador (¿Cómo están separadas las variables en el archivo?: Ej: `,`, `;`, tab) - separador decimal (¿Cómo figuran los números en la base? Ej: ¿10.000, 10000 o 10,000) - quotes: ¿Como están indicados los valores de las variables de texto en la base?, ¿Aparecen entre comillas? ] --- #Importación de bases de datos (usando proyectos) Si tenemos abierto un proyecto, el punto de partida para la ruta a especificar será la carpeta del proyecto. Si queremos ir hacia atrás en las carpetas agregamos **`../`** ```r inmuebles<- read_csv( file = "bases/inmuebles-estado-nacional.csv") comunas <- read.xlsx(xlsxFile = "bases/comunas.xlsx") ``` **IMPORTANTE**: Siempre que lean bases de datos asignarlas a un nuevo objeto. De lo contrario, las va a mostrar completas en consola y no va a guardarlas en el ambiente de trabajo (enviroment) --- #Práctica - Copien la carpeta "bases" adentro de la carpeta del proyecto que crearon previamente. - Con el proyecto y script previos abiertos en RStudio, importen correctamente a su ambiente de trabajo el archivo **"inmuebles-estado-nacional.csv"** - Utilicen la función `read.xlsx` para importar como dos objetos separados las bases que se encuentran en ambas pestañas del excel **"comunas.xlsx"**. (Pista: Pueden inspeccionar los parámetros de la función ejecutando **`?read.xlsx`** --- #Mirada exploratoria de la base de datos Algunas funciones útiles para explorar rápidamente el contenido de nuestra base de datos: - **`summary()`**: Muestra medidas de resumen de las variables: distintos momentos de la distribución para variables *numéricas* o de *fecha*, y un conteo de casos para variables de tipo *character*. - **`unique()`**: Permite ver los únicos valores que toma cierta variable en mi base de datos. - **`table()`**: Esta función puede utilizarse para hacer tabulados univariados o bivariados. - **`glimpse()`**<sup>t</sup>: nos muestra en formato más amigable un listado de las variables de la base, indicando la clase de variable en cuestión, y muestra los primeros valores de cada una de ellas - **`sample_n()`**<sup>t</sup>: Nos permite seleccionar una muestra al azar de **n** casos de nuestra base. Puede ser útil para una primera mirada de la base que trascienda a los primeros casos, o bien para procedimienos de muestreo. <sup>t</sup> Pertenecen al paquete **tidyverse** --- count: false # Ejemplo - summary() .panel1-summary-auto[ ```r *inmuebles ``` ] .panel2-summary-auto[ ``` ## # A tibble: 670 x 12 ## codigo_del_inmueble organizacion pais provincia departamento localidad calle ## <dbl> <chr> <chr> <chr> <chr> <chr> <chr> ## 1 200002040 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 2 200002059 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 3 200002067 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 4 200002075 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 3 <NA> Hipo~ ## 5 200002083 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Carl~ ## 6 200002091 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Carl~ ## 7 200002105 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 8 200002113 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Humb~ ## 9 200002121 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Hipo~ ## 10 200002131 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> San ~ ## # ... with 660 more rows, and 5 more variables: numero <chr>, ## # situacion_inmueble <chr>, superficie_aproximada_m2 <dbl>, longitud <dbl>, ## # latitud <dbl> ``` ] --- count: false # Ejemplo - summary() .panel1-summary-auto[ ```r inmuebles %>% * summary() ``` ] .panel2-summary-auto[ ``` ## codigo_del_inmueble organizacion pais provincia ## Min. : 604 Length:670 Length:670 Length:670 ## 1st Qu.: 200002445 Class :character Class :character Class :character ## Median : 200005670 Mode :character Mode :character Mode :character ## Mean : 830462217 ## 3rd Qu.: 200028438 ## Max. :9900000577 ## departamento localidad calle numero ## Length:670 Length:670 Length:670 Length:670 ## Class :character Class :character Class :character Class :character ## Mode :character Mode :character Mode :character Mode :character ## ## ## ## situacion_inmueble superficie_aproximada_m2 longitud latitud ## Length:670 Min. : 30 Min. :-118.32 Min. :-41.13 ## Class :character 1st Qu.: 425 1st Qu.: -58.44 1st Qu.:-34.61 ## Mode :character Median : 694 Median : -58.39 Median :-34.61 ## Mean : 14396 Mean : -56.79 Mean :-30.32 ## 3rd Qu.: 1329 3rd Qu.: -58.38 3rd Qu.:-34.58 ## Max. :4189756 Max. : 149.12 Max. : 59.92 ``` ] <style> .panel1-summary-auto { color: black; width: 35.9333333333333%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-summary-auto { color: black; width: 62.0666666666667%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-summary-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- count: false # Ejemplo - glimpse() .panel1-glimpse-auto[ ```r *inmuebles ``` ] .panel2-glimpse-auto[ ``` ## # A tibble: 670 x 12 ## codigo_del_inmueble organizacion pais provincia departamento localidad calle ## <dbl> <chr> <chr> <chr> <chr> <chr> <chr> ## 1 200002040 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 2 200002059 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 3 200002067 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 4 200002075 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 3 <NA> Hipo~ ## 5 200002083 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Carl~ ## 6 200002091 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Carl~ ## 7 200002105 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 8 200002113 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Humb~ ## 9 200002121 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Hipo~ ## 10 200002131 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> San ~ ## # ... with 660 more rows, and 5 more variables: numero <chr>, ## # situacion_inmueble <chr>, superficie_aproximada_m2 <dbl>, longitud <dbl>, ## # latitud <dbl> ``` ] --- count: false # Ejemplo - glimpse() .panel1-glimpse-auto[ ```r inmuebles %>% * glimpse() ``` ] .panel2-glimpse-auto[ ``` ## Rows: 670 ## Columns: 12 ## $ codigo_del_inmueble <dbl> 200002040, 200002059, 200002067, 200002075, 2~ ## $ organizacion <chr> "AFIP ADMINISTRACIÓN FEDERAL DE INGRESOS PÚBL~ ## $ pais <chr> "Argentina", "Argentina", "Argentina", "Argen~ ## $ provincia <chr> "Ciudad Autonoma de Buenos Aires", "Ciudad Au~ ## $ departamento <chr> "Comuna 1", "Comuna 1", "Comuna 1", "Comuna 3~ ## $ localidad <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~ ## $ calle <chr> "Avenida Rivadavia", "Avenida de Mayo", "Aven~ ## $ numero <chr> "1355", "1317", "635", "2221/51", "675", "53"~ ## $ situacion_inmueble <chr> "Propiedad del ENA", "Propiedad del ENA", "Pr~ ## $ superficie_aproximada_m2 <dbl> 946.18, 1361.25, 2740.15, 1461.43, 1137.77, 4~ ## $ longitud <dbl> -58.38568, -58.38507, -58.36983, -58.39805, -~ ## $ latitud <dbl> -34.60843, -34.60896, -34.61510, -34.61049, -~ ``` ] <style> .panel1-glimpse-auto { color: black; width: 35.9333333333333%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-glimpse-auto { color: black; width: 62.0666666666667%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-glimpse-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- count: false # Ejemplo - sample_n() .panel1-sample-auto[ ```r *inmuebles ``` ] .panel2-sample-auto[ ``` ## # A tibble: 670 x 12 ## codigo_del_inmueble organizacion pais provincia departamento localidad calle ## <dbl> <chr> <chr> <chr> <chr> <chr> <chr> ## 1 200002040 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 2 200002059 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 3 200002067 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 4 200002075 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 3 <NA> Hipo~ ## 5 200002083 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Carl~ ## 6 200002091 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Carl~ ## 7 200002105 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Aven~ ## 8 200002113 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Humb~ ## 9 200002121 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> Hipo~ ## 10 200002131 AFIP ADMINI~ Arge~ Ciudad A~ Comuna 1 <NA> San ~ ## # ... with 660 more rows, and 5 more variables: numero <chr>, ## # situacion_inmueble <chr>, superficie_aproximada_m2 <dbl>, longitud <dbl>, ## # latitud <dbl> ``` ] --- count: false # Ejemplo - sample_n() .panel1-sample-auto[ ```r inmuebles %>% * sample_n(size = 10) ``` ] .panel2-sample-auto[ ``` ## # A tibble: 10 x 12 ## codigo_del_inmueble organizacion pais provincia departamento localidad calle ## <dbl> <chr> <chr> <chr> <chr> <chr> <chr> ## 1 200015053 ESTADO MAYO~ Arge~ Ciudad A~ Comuna 13 <NA> Blan~ ## 2 9900000127 MINISTERIO ~ Cana~ Ontario <NA> Carlenton Aven~ ## 3 9900000453 MINISTERIO ~ Para~ Distrito~ <NA> Asunción Call~ ## 4 200028155 ANSES-ADMIN~ Arge~ Ciudad A~ Comuna 1 <NA> Chac~ ## 5 200027477 ANSES-ADMIN~ Arge~ Ciudad A~ Comuna 1 <NA> Solis ## 6 200028503 ANSES-ADMIN~ Arge~ Ciudad A~ Comuna 1 <NA> Dr A~ ## 7 200005147 ESTADO MAYO~ Arge~ Ciudad A~ Comuna 14 <NA> Av. ~ ## 8 200027930 ANSES-ADMIN~ Arge~ Ciudad A~ Comuna 1 <NA> Chac~ ## 9 200042336 MINISTERIO ~ Arge~ Ciudad A~ Comuna 1 <NA> Riva~ ## 10 200024745 ESTADO MAYO~ Arge~ Ciudad A~ Comuna 14 <NA> Av. ~ ## # ... with 5 more variables: numero <chr>, situacion_inmueble <chr>, ## # superficie_aproximada_m2 <dbl>, longitud <dbl>, latitud <dbl> ``` ] <style> .panel1-sample-auto { color: black; width: 35.9333333333333%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-sample-auto { color: black; width: 62.0666666666667%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-sample-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- #Práctica - Importen la base de datos al ambiente de trabajo (Ver función adecuada para importar archivos .RDS) - Apliquen la función **`summary(nombre_base_datos)`**. Observen el resultado en consola. ¿Algo les llama atención de la información arrojada? - Ejecuten **`table(inmuebles$pais)`** y observen el total de casos de la base por provincia - Elaboren un tabulado bivariado entre las variables **pais** y **situacion_inmueble** - ¿Qué valores puedo encontrar en la variable **organizacion**? --- class: inverse, center, middle # Uniendo dataframes <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- # Uniendo dataframes - dplyr (dentro de tidyverse) .pull-left[ **Joins**: Nos permiten unir horizontalmente dos bases, a partir de alguna/s variable/s en común <img src="data:image/png;base64,#img/joins2.png" width="907" /> [Fuente](https://www.youtube.com/watch?v=Yg-pNqzDuN4) ] .pull-right[ **bind_rows()**: Nos permiten unir verticalmente dos bases, apilando los valores de aquellas variables en común <img src="data:image/png;base64,#img/bind_rows.png" width="672" /> [Fuente](https://blog.exploratory.io/merging-two-data-frames-with-union-or-bind-rows-a55e79766d0?gi=dbebe4a50052) ] --- # Uniendo dataframes - dplyr (dentro de tidyverse) **left_join**: Veamos como funciona si tengo estos dos dataframes (el de la izquierda seria mi base de datos y el de la derecha un diccionario de como esta codificado el nivel educativo) .pull-left[ ```r base_encuesta ``` ``` ## sexo sdad nivel_ed ## 1 2 95 5 ## 2 2 38 3 ## 3 2 10 7 ## 4 2 21 6 ## 5 1 90 5 ## 6 1 84 7 ## 7 2 3 7 ## 8 2 25 5 ## 9 1 12 2 ## 10 2 83 2 ## 11 1 35 4 ## 12 1 7 6 ## 13 2 74 1 ## 14 2 23 5 ## 15 1 53 1 ``` ] .pull-right[ ```r diccionario_niveles ``` ``` ## nivel_ed nivel_ed_text ## 1 1 Primaria incompleta ## 2 2 Primaria completa ## 3 3 Secundaria incompleta ## 4 4 Secundaria completa ## 5 5 Terc/Univ incompleta ## 6 6 Terc/Univ completa ## 7 7 Sin Instruccion ``` ] --- count: false # Ejemplo - leftjoin() .panel1-leftjoin-auto[ ```r *base_encuesta ``` ] .panel2-leftjoin-auto[ ``` ## sexo sdad nivel_ed ## 1 2 95 5 ## 2 2 38 3 ## 3 2 10 7 ## 4 2 21 6 ## 5 1 90 5 ## 6 1 84 7 ## 7 2 3 7 ## 8 2 25 5 ## 9 1 12 2 ## 10 2 83 2 ## 11 1 35 4 ## 12 1 7 6 ## 13 2 74 1 ## 14 2 23 5 ## 15 1 53 1 ``` ] --- count: false # Ejemplo - leftjoin() .panel1-leftjoin-auto[ ```r base_encuesta %>% * left_join(.,diccionario_niveles) ``` ] .panel2-leftjoin-auto[ ``` ## Joining, by = "nivel_ed" ``` ``` ## sexo sdad nivel_ed nivel_ed_text ## 1 2 95 5 Terc/Univ incompleta ## 2 2 38 3 Secundaria incompleta ## 3 2 10 7 Sin Instruccion ## 4 2 21 6 Terc/Univ completa ## 5 1 90 5 Terc/Univ incompleta ## 6 1 84 7 Sin Instruccion ## 7 2 3 7 Sin Instruccion ## 8 2 25 5 Terc/Univ incompleta ## 9 1 12 2 Primaria completa ## 10 2 83 2 Primaria completa ## 11 1 35 4 Secundaria completa ## 12 1 7 6 Terc/Univ completa ## 13 2 74 1 Primaria incompleta ## 14 2 23 5 Terc/Univ incompleta ## 15 1 53 1 Primaria incompleta ``` ] --- count: false # Ejemplo - leftjoin() .panel1-leftjoin-auto[ ```r base_encuesta %>% left_join(.,diccionario_niveles) ``` ] .panel2-leftjoin-auto[ ``` ## Joining, by = "nivel_ed" ``` ``` ## sexo sdad nivel_ed nivel_ed_text ## 1 2 95 5 Terc/Univ incompleta ## 2 2 38 3 Secundaria incompleta ## 3 2 10 7 Sin Instruccion ## 4 2 21 6 Terc/Univ completa ## 5 1 90 5 Terc/Univ incompleta ## 6 1 84 7 Sin Instruccion ## 7 2 3 7 Sin Instruccion ## 8 2 25 5 Terc/Univ incompleta ## 9 1 12 2 Primaria completa ## 10 2 83 2 Primaria completa ## 11 1 35 4 Secundaria completa ## 12 1 7 6 Terc/Univ completa ## 13 2 74 1 Primaria incompleta ## 14 2 23 5 Terc/Univ incompleta ## 15 1 53 1 Primaria incompleta ``` ] <style> .panel1-leftjoin-auto { color: black; width: 35.9333333333333%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-leftjoin-auto { color: black; width: 62.0666666666667%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-leftjoin-auto { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- class: inverse, center, middle # Exportacion de Resultados <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- #Exportación de resultados Por lo general, cada paquete que presenta funciones para importar bases de datos, tiene como complemento una función para exportar (guardar en el disco de nuestra PC) un objeto con la misma extensión. Ejemplos: - el paquete **openxlsx** tiene una función denominada **`write.xlsx()`** que nos permite exportar un dataframe creando un archivo **.xslx** - En RBase la función **`saveRDS()`** nos permite exportar archivos de extensión **.RDS** (son menos pesados para trabajarlos luego desde R) En general estas funciones tienen un primer parametro para especificar el objeto a exportar, y un segundo para especificar la ruta y el nombre de archivo a crear () ```r write.xlsx(x = objeto_resultados,file = "Resultados/cuadro1.xlsx") saveRDS(object = objeto_resultados,file = "Resultados/base_nueva.RDS") ``` --- #Práctica - Importen todas las bases de datos de la carpeta **bases** a su ambiente de trabajo - Usen la función bind_rows() para unir la base **inmuebles-estado-nacional.csv** con la base **otros-inmuebles-estado-nacional.csv** - Prueben correr las funciones unique() y duplicated() sobre el resultado anterior. Luego, en caso de haber, eliminen los registros duplicados - Observen los valores que toma la variable `COMUNAS` en el listado que presenta el archivo **Comunas.xlsx**.Creen una nueva columna llamada "localidad" que les sirva para unir la informacion con la de la base de los inmuebles - Usen la función left_join() para incorporar a la base de inmuebles la informacion de los barrios que tiene cada comuna --- #Práctica - Ejecuten ```dir.create("Resultados/")```. ¿Que generó en la carpeta de su proyecto? - Exporten el objeto que contiene la base final hacia un Excel utilizando la funcion **`write.xlsx`**.